/* eslint react/no-multi-comp:0, no-console:0 */

import createForm from '../src/createDOMForm';

const Form = {
  props: {
    form: Object,
  },
  methods: {
    onSubmit(e) {
      e.preventDefault();
      console.log('Values of member[0].name.firstname and a[0][1].b.c[0]');
      console.log(this.form.getFieldsValue(['member[0].name.firstname', 'a[0][1].b.c[0]']));
      console.log('Values of all fields');
      console.log(this.form.getFieldsValue());

      this.form.validateFieldsAndScroll((error, values) => {
        if (!error) {
          console.log('ok', values);
        } else {
          console.log('error', error, values);
        }
      });
    },

    onChange(e) {
      console.log(e.target.value);
    },

    setField() {
      this.form.setFieldsValue({
        member: [
          {
            name: {
              firstname: 'm1 first',
              lastname: 'm1 last',
            },
          },
          {
            name: {
              firstname: 'm2 first',
              lastname: 'm2 last',
            },
          },
        ],
        a: [
          [
            undefined,
            {
              b: {
                c: ['Value of a[0][1].b.c[0]'],
              },
            },
          ],
        ],
        w: {
          x: {
            y: {
              z: ['Value of w.x.y.z[0]'],
            },
          },
        },
      });
    },

    resetFields() {
      console.log('reset');
      this.form.resetFields();
    },
  },

  render() {
    const { getFieldDecorator, getFieldError } = this.form;

    return (
      <form onSubmit={this.onSubmit}>
        <div>Member 0 firstname</div>
        {getFieldDecorator('member[0].name.firstname', {
          initialValue: '',
          rules: [
            {
              required: true,
              message: "What's the member_0 firstname?",
            },
          ],
        })(<input onInput={this.onChange} />)}
        <div style={{ color: 'red' }}>
          {(getFieldError('member[0].name.firstname') || []).join(', ')}
        </div>

        <div>Member 0 lastname</div>
        {getFieldDecorator('member[0].name.lastname', {
          initialValue: '',
          rules: [
            {
              required: true,
              message: "What's the member_0 lastname?",
            },
          ],
        })(<input onInput={this.onChange} />)}
        <div style={{ color: 'red' }}>
          {(getFieldError('member[0].name.firstname') || []).join(', ')}
        </div>

        <div>Member 1 firstname</div>
        {getFieldDecorator('member[1].name.firstname', {
          initialValue: '',
          rules: [
            {
              required: true,
              message: "What's the member_1 fistname?",
            },
          ],
        })(<input onInput={this.onChange} />)}
        <div style={{ color: 'red' }}>
          {(getFieldError('member[1].name.firstname') || []).join(', ')}
        </div>

        <div>Member 1 lastname</div>
        {getFieldDecorator('member[1].name.lastname', {
          initialValue: '',
          rules: [
            {
              required: true,
              message: "What's the member_1 lastname?",
            },
          ],
        })(<input onInput={this.onChange} />)}
        <div style={{ color: 'red' }}>
          {(getFieldError('member[1].name.firstname') || []).join(', ')}
        </div>

        <div>a[0][1].b.c[0]</div>
        {getFieldDecorator('a[0][1].b.c[0]', {
          initialValue: '',
          rules: [
            {
              required: true,
              message: "What's a[0][1].b.c[0]?",
            },
          ],
        })(<input onInput={this.onChange} />)}
        <div style={{ color: 'red' }}>{(getFieldError('a[0][1].b.c[0]') || []).join(', ')}</div>

        <div>w.x.y.z[0]</div>
        {getFieldDecorator('w.x.y.z[0]', {
          initialValue: '',
          rules: [
            {
              required: true,
              message: "What's w.x.y.z[0]?",
            },
          ],
        })(<input onInput={this.onChange} />)}
        <div style={{ color: 'red' }}>{(getFieldError('w.x.y.z[0]') || []).join(', ')}</div>

        <button onClick={this.setField}>Set field</button>
        <button onClick={this.resetFields}>Reset fields</button>
        <button>Submit</button>
      </form>
    );
  },
};

const NewForm = createForm({
  onFieldsChange(_, changedFields, allFields) {
    console.log('onFieldsChange: ', changedFields, allFields);
  },
  onValuesChange(_, changedValues, allValues) {
    console.log('onValuesChange: ', changedValues, allValues);
  },
})(Form);

export default {
  render() {
    return (
      <div>
        <h2>setFieldsValue</h2>
        <NewForm />
      </div>
    );
  },
};
